﻿using System.ComponentModel;
using System.Windows.Controls;
using System.Windows.Input;

namespace TreeDataGrid_Warehouse.Controls.TreeDataGrid
{
    class TreeDataGridRow : DataGridRow, INotifyPropertyChanged
    {
		public int ExpandHierarchyIndex { get; set; }

        private TreeNode _node;
        public TreeNode Node
        {
            get { return _node; }
            internal set
            {
                _node = value;
                OnPropertyChanged ("Node");
            }
        }

        public TreeDataGridRow ()
        {

        }

		public void AddRow ()
		{

		}

        //protected override void OnKeyDown (KeyEventArgs e)
        //{
        //    if (Node != null) {
        //        switch (e.Key) {
        //            case Key.Right:
        //                e.Handled = true;
        //                if (!Node.IsExpanded) {
        //                    Node.IsExpanded = true;
        //                    ChangeFocus (Node);
        //                } else if (Node.Children.Count > 0)
        //                    ChangeFocus (Node.Children[0]);
        //                break;

        //            case Key.Left:
        //                e.Handled = true;
        //                if (Node.IsExpanded && Node.IsExpandable) {
        //                    Node.IsExpanded = false;
        //                    ChangeFocus (Node);
        //                } else
        //                    ChangeFocus (Node.Parent);
        //                break;

        //            case Key.Subtract:
        //                e.Handled = true;
        //                Node.IsExpanded = false;
        //                ChangeFocus (Node);
        //                break;

        //            case Key.Add:
        //                e.Handled = true;
        //                Node.IsExpanded = true;
        //                ChangeFocus (Node);
        //                break;
        //        }
        //    }

        //    if (!e.Handled)
        //        base.OnKeyDown (e);
        //}

        void ChangeFocus (TreeNode node)
        {
            var tree = node.Tree;
            if (tree != null) {
                var item = tree.ItemContainerGenerator.ContainerFromItem (node) as TreeDataGridRow;
                if (item != null)
                    item.Focus ();
                else
                    tree.PendingFocusNode = node;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged (string name)
        {
            PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (name));
        }
    }
}
